Welcome to pandas!

6.11 索引重置

索引重置就是对索引标签的位置重新排列,对DateFrame表格索引重置使用d.reindex()

结构如下:

df.reindex(labels=None,index=None,columns=None,method=None,copy=None,level=None,fill_value=nan,limit=None,tolerance=None)

labels :指定要重置的标签序列,可以是列表,数组等可迭代对象

index :如果axis=0,可以index=labels形式重置行索引

columns :如果axis=1,可以columns=labels形式重置列索引

axis :指定重置索引的方向;

method :重置索引后,DateFrame中缺失值的补充,有四个形式

None(default): 不填补空白,默认值

Pad/ffill: 将上一个有效索引值填补到下一下空白

Backfill/bfill: 使用后一个有效观察值填补空白

Nearest: 使用最近有效的观测值来填补空白,注意,这仅适用于具有单调递减/递增索引的DateFrame

Copy: 返回一个新对象,即使传递的索引相同


import pandas as pd,numpy as np

df1=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\测试素材.重置索引.xlsx" , index_col = 0 , sheet_name = "素材1" )

df2=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\测试素材.重置索引.xlsx" , sheet_name = "素材2" )

print (df1)

print (df2)

df3=np.unique(df2.工号) #np.unique() 函数去除其中重复的元素 ,并按元素由小到大 返回一个新的无元素重复的元组或者列表。

df=df1.reindex( labels =df3)

print (df)

返回:

班别 姓名 理论 实操
工号
NED25 A班 张三 89 87
NED21 A班 李四 68 56
NED07 A班 杨麻子 23 12
NED28 B班 小新 98 88
NED22 B班 小曾 79 86

工号 性别
0 NED28
1 NED07
2 NED29
3 NED25
4 NED28

班别 姓名 理论 实操
工号
NED07 A班 杨麻子 23.0 12.0
NED25 A班 张三 89.0 87.0
NED28 B班 小新 98.0 88.0
NED29 NaN NaN NaN NaN

索引重置时,如果索引标签不存在时,那么就会创建为新标签,新索引标签对应的数据则默认为缺失值, 但df.reindex()的method参数也提供了其他不同的填充方式。

1、 取相同值填充,

引标签对应的数据没有填充之前都是缺失值,如果都填充为相同值,那么可以使用fill_value参数。

2、 取前一个有效值填充

如果要提取前一个有效值,那么method参数可以设置为“pad”

3、取后一个有效值填充

如果要提取后一个有效值,那么method参数可以设置为“pad”

4、Nearest:使用最近有效的观测值来填补空白,注意,这仅适用于具有单调递减/递增索引的DateFrame


import pandas as pd

df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\1.6.11 索引重置2.xlsx" )

df1=df.reindex( labels =[ 0,0.1,0.5,0.9,1,2 ], method = "pad" )

df2=df.reindex( labels =[ 0,0.1,0.5,0.9,1,2 ], method = "nearest" )

print (df1)

print (df2)

返回:

姓名 部门 工资
0.0 张三 销售部 10000
0.1 张三 销售部 10000
0.5 张三 销售部 10000
0.9 张三 销售部 10000
1.0 杨麻子 IT部 9999
2.0 小新 财务部 6666

姓名 部门 工资
0.0 张三 销售部 10000
0.1 张三 销售部 10000
0.5 杨麻子 IT部 9999
0.9 杨麻子 IT部 9999
1.0 杨麻子 IT部 9999
2.0 小新 财务部 6666